package com.liyuan.entity;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Writable;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

/**
 * HotSection类表示一个热点段落实体，继承自IntWritable类，实现了Writable接口。
 * 用于存储热点段落的相关信息。
 */
public class HotSection extends IntWritable implements Writable {
    // 排名
    private Integer SectionYop;
    // 标题
    private String SectionTitle;
    // 热点内容
    private String SectionContext;
    // 来源
    private String SectionSource;
    // 创建时间
    private Long CreateTime;

    /**
     * 获取热点段落的排名。
     *
     * @return 排名，返回类型为Integer。
     */
    public Integer getSectionYop() {
        return SectionYop;
    }

    /**
     * 设置热点段落的排名。
     *
     * @param sectionYop 排名，参数类型为Integer。
     */
    public void setSectionYop(Integer sectionYop) {
        SectionYop = sectionYop;
    }

    /**
     * 获取热点段落的标题。
     *
     * @return 标题，返回类型为String。
     */
    public String getSectionTitle() {
        return SectionTitle;
    }

    /**
     * 设置热点段落的标题。
     *
     * @param sectionTitle 标题，参数类型为String。
     */
    public void setSectionTitle(String sectionTitle) {
        SectionTitle = sectionTitle;
    }

    /**
     * 获取热点段落的内容。
     *
     * @return 内容，返回类型为String。
     */
    public String getSectionContext() {
        return SectionContext;
    }

    /**
     * 设置热点段落的内容。
     *
     * @param sectionContext 内容，参数类型为String。
     */
    public void setSectionContext(String sectionContext) {
        SectionContext = sectionContext;
    }

    /**
     * 获取热点段落的来源。
     *
     * @return 来源，返回类型为String。
     */
    public String getSectionSource() {
        return SectionSource;
    }

    /**
     * 设置热点段落的来源。
     *
     * @param sectionSource 来源，参数类型为String。
     */
    public void setSectionSource(String sectionSource) {
        SectionSource = sectionSource;
    }

    /**
     * 获取热点段落的创建时间。
     *
     * @return 创建时间，返回类型为Long。
     */
    public Long getCreateTime() {
        return CreateTime;
    }

    /**
     * 设置热点段落的创建时间。
     *
     * @param createTime 创建时间，参数类型为Long。
     */
    public void setCreateTime(Long createTime) {
        CreateTime = createTime;
    }

    /**
     * 重写toString方法，以特定格式返回热点段落的信息。
     *
     * @return 包含热点段落信息的字符串，各字段之间以制表符分隔。
     */
    @Override
    public String toString() {
        return String.valueOf(SectionYop) + '\t' +
                SectionTitle + '\t' +
                SectionContext + '\t' +
                SectionSource + '\t' +
                CreateTime
                ;
    }

    /**
     * HotSection类的默认构造函数，用于创建一个空的HotSection对象。
     */
    public HotSection() {
    }

    /**
     * HotSection类的构造函数，初始化热点段落的各项信息。
     *
     * @param sectionYop     热点段落的排名。
     * @param sectionTitle   热点段落的标题。
     * @param sectionContext 热点段落的内容。
     * @param sectionSource  热点段落的来源。
     * @param createTime     热点段落的创建时间。
     */
    public HotSection(Integer sectionYop, String sectionTitle, String sectionContext, String sectionSource, Long createTime) {
        SectionYop = sectionYop;
        SectionTitle = sectionTitle;
        SectionContext = sectionContext;
        SectionSource = sectionSource;
        CreateTime = createTime;
    }

    /**
     * 实现Writable接口的write方法，将热点段落的信息写入数据输出流。
     *
     * @param dataOutput 数据输出流对象。
     * @throws IOException 如果写入过程中发生IO异常。
     */
    @Override
    public void write(DataOutput dataOutput) throws IOException {
        dataOutput.writeInt(SectionYop);
        dataOutput.writeUTF(SectionTitle);
        dataOutput.writeUTF(SectionContext);
        dataOutput.writeUTF(SectionSource);
        dataOutput.writeLong(CreateTime);
    }

    /**
     * 实现Writable接口的readFields方法，从数据输入流读取热点段落的信息。
     *
     * @param dataInput 数据输入流对象。
     * @throws IOException 如果读取过程中发生IO异常。
     */
    @Override
    public void readFields(DataInput dataInput) throws IOException {
        SectionYop = dataInput.readInt();
        SectionTitle = dataInput.readUTF();
        SectionContext = dataInput.readUTF();
        SectionSource = dataInput.readUTF();
        CreateTime = dataInput.readLong();
    }
}
